/*
  冒泡排序
  编写人：loulu
  日期：
  版本：v3.0
  变化历史： 
  1. 原始待排序数据（数组）随机产生，利用vector
  2. 把数组显示，改成函数 disp
  3. 把2个变量交换写出函数swap
  
 */
#include <bits/stdc++.h>


using namespace std;

//自定义交换函数
void swap(int *a, int *b){
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
//自定义的输出函数disp
void disp(int a[],int n) //输出a中所有元素
{ int i;
	for (i=0;i<n;i++)
		printf("%d ",a[i]);
	printf("\n");
}

////随机生成一组不重复的一维数据的自定义函数 
std::vector<int> randVector(int num) {
	std::vector<int> result;
	result.clear();
	result.reserve(num);
	srand((int)time(0)); //利用当前机器时间产生随机数，
	for (int i = 0; i < num; i++)
	{
		result.push_back(i);
	}
	int p1;
	int p2;
	int temp;
	int count = num;
	
	while (--num)
	{
		p1 = num;
		p2 = rand() % num;
		temp = result[p1];
		result[p1] = result[p2];
		result[p2] = temp;
	}
	return result;
}


//冒泡排序
void bubble_sort(int arr[], int len) {
	int i, j, temp;
	for (i = 0; i < len - 1; i++)
		for (j = 0; j < len - 1 - i; j++)
			if (arr[j] > arr[j + 1]) {
		temp = arr[j];
		arr[j] = arr[j + 1];
		arr[j + 1] = temp;
	}
}

int main() {
	//原始待排序数据准备
	//int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
	//int len = (int) sizeof(arr) / sizeof(*arr);
	int n=14; int a[n]={0};
	
	vector<int> v=randVector(n); //生成n个不重复的随机数，顺序是随机的
	copy(v.begin(),v.end(), a);    
	
	//待排序数据显示
	printf("排序前:"); disp(a,n);
	
	//执行排序
	bubble_sort(a, n);
	
	//显示已排序数据
	printf("排序后:"); disp(a,n);
	
	return 0;
}


